
class form {
  constructor() {

  }

  // 正则校验
  check (...params) {
    let str = params.pop();
    typeof str === 'string' ? '' : str += '';
    for (let i = params.length; i; i--)
      if (!params[i - 1].test(str))
        return false;
    return true;
  }

  // 将一个函数定制化为偏函数
  partial (func, ...params) {
    return (...p2) => func(...params, ...p2);
  }

  // 表单单个值校验
  checkFormValue (value, ...params) {
    const isNull = /^.+$/i; // 空值校验
    const func = this.partial(this.check, isNull, ...params);
    return func.call(this, value);
  }

  // 表单所有值校验，仅限字符串，通过正则校验
  checkForm (form, tip, callback, ...params) {
    const keys = Object.keys(tip);
    for (let i = keys.length; i; i--) {
      const key = keys[i - 1];
      if (!this.checkFormValue(form[key], ...params)) {
        callback(tip[key]);
        return false;
      }
    }
    return true;
  }
}

export default new form();
